A cryptographic hash function (CHF) is a basic cryptographic primitive and as such it has been widely investigated. Informally, a hash function is any function which takes as input a long string of bits and returns a short, fairly random string of bits. Basically, a cryptographic hash function is a hash function with the additional property that finding two input strings which map to the same output string is computationally infeasible. There are actually several variations in the definition of a CHF--the distinctions among the variations will be discussed shortly.
Cryptographic hash functions have a wide variety of applications. For motivational purposes, several applications are briefly outlined. These applications of cryptographic hash functions are not exhaustive--they are simply meant to be illustrative of their broad cryptographic utility. Cryptographic hash functions are used for virus protection and data security. That is, rather than storing an entire program or an entire data set securely, one need only store the cryptographic hash of the program or the data set securely. Before using the program or data set, one first computes the hash value and checks it with the securely stored hash value. In this way, any change to the data or the program will be detected. Also, cryptographic hash functions are used in a similar manner to implement tamper-proof digital time-stamps.
In addition, cryptographic hash functions can be used to implement unforgeable digital signatures. Such a digital signature is quite complicated, however, compared to digital signatures based on public-key cryptosystems. Unfortunately, public-key digital signatures require an inordinate amount of time to compute for large documents. An efficient and simple digital signature scheme is achieved by combining cryptographic hashing with the public-key cryptosystem: a cryptographic hash value of a large document is first computed, and that is subsequently signed using the public-key scheme.
Another use of hash functions can be seen in the following example. Suppose parties A and B share a secret s and A wishes to authenticate itself to B. B can send a challenge c to A in the clear. A computes the cryptographic hash value of (c,s) and sends it to B. B accepts the authenticity of A if the value it receives is the same as the cryptographic hash value of (c ,s) that it privately computed.
Thus far the distinctions between several types of CHFs have been ignored. The two most important variants are now described. The first is called a Universal One-way Hash Function. Such a hash function is indexed by a key. The key is chosen uniformly and independently of the input string. Given the input and the key (and, thus, the hash value), finding another input with the same hash value is infeasible with very high probability. Universal Hash Functions are known to exist if One Way Functions (i.e., functions which are easy to compute but infeasible to invert) exist.
The second variant is called a One-Way Hash Function (OWHF). A OWHF may or may not be indexed by a key. For a OWHF, finding two inputs (and the key if it is a keyed function) which hash to the same value is computationally infeasible. Note that OWHFs resist stronger attacks than UHFs. This makes them both more useful and more difficult to design. Indeed, currently it is not known whether One Way Functions are sufficient to design OWHFs.
The art is devoid of teachings or suggestions wherein a OWHF: (1) uses a strong pseudo-random generator; (2) uses input data to create high quality, pseudo-random keys as indicies to pseudo-random functions; and (3) generates a pseudo-random function from 2n bits to 2n bits given a pseudo-random function from n bits to n bits.